package com.gnerv.sylvanas.business.manage.storage;

import com.gnerv.sylvanas.business.manage.model.dto.OrgDTO;
import com.gnerv.sylvanas.business.manage.model.dto.OrgTreeDTO;
import com.gnerv.sylvanas.business.manage.model.entity.Org;
import com.gnerv.sylvanas.business.manage.repository.mapper.OrgMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author Gnerv LiGen
 */
@Slf4j
@Service
@AllArgsConstructor
public class OrgStorageService {

    private static final String ROOT_ID = "0";
    private static final String ROOT_NAME = "root";
    private static final OrgDTO TOP_ORG;
    private final OrgMapper orgMapper;

    static {
        OrgDTO orgDTO = new OrgDTO();
        orgDTO.setUkId(ROOT_ID);
        orgDTO.setName(ROOT_NAME);
        TOP_ORG = orgDTO;
    }

    
    public int insert(Org org) {
        return orgMapper.insert(org);
    }

    
    public int deleteByUkId(String ukId) {
        return orgMapper.deleteByUkId(ukId);
    }

    
    public int updateByUkId(Org org) {
        return orgMapper.updateByUkId(org);
    }

    
    public OrgDTO selectByUkId(String ukId) {
        if (ROOT_ID.equals(ukId)) {
            return TOP_ORG;
        }
        return orgMapper.selectByUkId(ukId);
    }

    
    public List<OrgDTO> selectListByName(String name) {
        return orgMapper.selectListByName(name);
    }

    
    public List<OrgDTO> selectListByParentUkId(String parentUkId) {
        return orgMapper.selectListByParentUkId(parentUkId);
    }

    
    public List<OrgTreeDTO> selectListTreeByParentUkId(String parentUkId) {
        return orgMapper.selectListTreeByParentUkId(parentUkId);
    }

    
    public OrgDTO selectByAccountUkId(String accountUkId) {
        return orgMapper.selectByAccountUkId(accountUkId);
    }

    
    public int selectCountByParentUkId(String parentUkId) {
        return orgMapper.selectCountByParentUkId(parentUkId);
    }

    
    public List<OrgTreeDTO> selectListTreeByAccountUkId(String accountUkId) {
        return orgMapper.selectListTreeByAccountUkId(accountUkId);
    }

}
